package com.prototype.vaadin;

/**
  résumé 
j'ai fais avec des méthode static pour faire le tout dans le meme fichier,

parsePage(String url)  
	+elle récupère le fichier Html de la page web dont l'url est passé en paramettre.
	+du fichier html elle extrait les url et le nom propre a chaque projet "logiciel"
	+elle enregistre les noms des projetc et leur emlpacement dans le site "url" dans deux arraylist 



la méthode recupèreLesProjets( String urlprincipal ) 
*va établir une connection avec sourceforge avec des critères bien définits dans le paramettre urlprincipal
*elle utilise la méthode urlPage(), qui renvoie une arraylist de String "les urls de toutes les pages qui contien les projets  "
*une fois les urls récupéré par la méthode urlPage() on appel la méthode parsePage(String url);

le Programme:
*/

import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class Test {

        private  String urlPrincipale=null;                   
	private  ArrayList<String> malist_de_lien= null;  
	private  ArrayList<String> malist_deText_Delien= null;
	
    public Test(String urlPrincipale) {
        try {
            this.urlPrincipale=urlPrincipale;
            malist_de_lien= new ArrayList<String>();
            malist_deText_Delien= new ArrayList<String>();
           
            this.recupèreLesProjets(urlPrincipale);
            
        } catch (IOException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InterruptedException ex) {
            Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }

	
    
        /* cette méthode retourne le nombre 
         * de pages web, contenant les projets
         */
    
	public int nbPage(){
		int tailleList = getMalist_deText_Delien().size();
		String nombreDepageString =getMalist_deText_Delien().get(tailleList-2);
		int nombreDePage = Integer.parseInt(nombreDepageString);
		return nombreDePage;
		
	}
	public void parsePage(String urlPage) throws IOException{
		Document sf_page = Jsoup.connect(urlPage).timeout(0).get();
		Element resultat = sf_page.getElementById("result_data");
		Elements links = resultat.getElementsByTag("a");
		
		for (Element link : links) {
		    String linkHref = link.attr("href");
		    String linkText = link.text();
		 
		    getMalist_de_lien().add(linkHref);
		   	getMalist_deText_Delien().add(linkText);
		    	
		 }
	}
	
        /*
         * comme la recherche fournit 
         * plusieurs projets sur différentes 
         * page on est obligé de traiter page
         * par page, cela ce fait on ayant une
         * pour chaque page
         */
	public ArrayList<String> urlPage(){
		final String autrepage = "?page=";
		ArrayList<String> URLs_de_Pages= new ArrayList<String>();
		int nbpage= nbPage();   //on aura le nombre totale de pages
		for(int i=2;i<=nbpage;i++){
			String s = Integer.toString(i); 
			URLs_de_Pages.add(getUrlPrincipale()+autrepage+s);
		}
		return URLs_de_Pages;
		
	}
        
	private void recupèreLesProjets(String urlPrincipale) throws IOException, InterruptedException{
		parsePage(urlPrincipale);
		ArrayList<String> listUrlPage =urlPage(); 
		for(int i=0;i<listUrlPage.size();i++){
			//Thread.sleep(2000);
			parsePage(listUrlPage.get(i));
		}
	 	
	}
	

    /**
     * @return the urlPrincipale
     */
    public String getUrlPrincipale() {
        return urlPrincipale;
    }

    /**
     * @return the malist_de_lien
     */
    public ArrayList<String> getMalist_de_lien() {
        return malist_de_lien;
    }

    /**
     * @return the malist_deText_Delien
     */
    public ArrayList<String> getMalist_deText_Delien() {
        return malist_deText_Delien;
    }
    public static void main(String[] args) throws IOException, InterruptedException {
	
        Test test;
        test = new Test("http://sourceforge.net/directory/natlanguage:french/language:php/freshness:recently-updated/");
		//test.recupèreLesProjets(urlPrincipale);
		
		int i;
		for(i=0;i<test.getMalist_de_lien().size();i+=2){
			System.out.println(test.getMalist_de_lien().get(i));
		}
		for(i=0;i<test.getMalist_deText_Delien().size();i++){
			System.out.println("nom: "+test.getMalist_deText_Delien().get(i));
		}
		/*for (Element link : links) {
			String linkText = link.text();
			System.out.println(malist_deText_Delien.size()+"  eeeee"+ linkText);
		}*/
		System.out.println("methode"+test.nbPage());
		System.out.println(test.urlPage());
		

    }

}